{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# **Van der pol Oscillator**\n",
    "(c) 2023 Devakumar Thammisetty\n",
    "\n",
    "MPOPT is an open-source Multi-phase Optimal Control Problem (OCP) solver based on pseudo-spectral collocation with customized adaptive grid refinement techniques.\n",
    "\n",
    "https://mpopt.readthedocs.io/\n",
    "\n",
    "Download this notebook: [vanderpol.ipynb](https://github.com/mpopt/mpopt/blob/docs/docs/source/notebooks/vanderpol.ipynb)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Install mpopt from pypi using the following. Disable after first usage"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Import mpopt (Contains main solver modules)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!pip install mpopt\n",
    "from mpopt import mp"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "OCP definition\n",
    "---------------\n",
    "\n",
    "Van der Pol OCP:\n",
    "https://web.casadi.org/docs/#a-simple-test-problem\n",
    "\n",
    "   \\begin{aligned}\n",
    "&\\min_{x, u}        & \\qquad & J = 0 + \\int_{t_0}^{t_f}\\left(x_0^2+x_1^2+u^2\\right)dt\\\\\n",
    "&\\text{subject to} &      & \\dot{x_0} = (1-x_1^2)\\times x_0 - x_1 + u\\\\\n",
    "&                  &      & \\dot{x_1} = x_0 \\\\\n",
    "&                  &      & x_1 \\geq -0.25 \\\\\n",
    "&                  &      & -1 \\leq u \\leq 1 \\\\\n",
    "&                  &      & x_0(t_0) = 0; \\ x_1(t_0) = 1; \\\\\n",
    "&                  &      & t_0 = 0.0; \\ t_f = 10\n",
    "  \\end{aligned}\n",
    "\n",
    "\n",
    "We first create an OCP object and then polulate the object with dynamics, path_constraints, terminal_constraints and objective (running_costs, terminal_costs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp = mp.OCP(n_states=2, n_controls=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def dynamics(x, u, t):\n",
    "    return [(1 - x[1] * x[1]) * x[0] - x[1] + u[0], x[0]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def running_cost(x, u, t):\n",
    "    return x[0] * x[0] + x[1] * x[1] + u[0] * u[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.dynamics[0] = dynamics\n",
    "ocp.running_costs[0] = running_cost"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Initial state"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.x00[0] = [0, 1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Box constraints"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.lbu[0] = -1.0\n",
    "ocp.ubu[0] = 1.0\n",
    "ocp.lbx[0][1] = -0.25\n",
    "ocp.lbtf[0] = 10.0\n",
    "ocp.ubtf[0] = 10.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "ocp.validate()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Solve and plot the results in one line\n",
    "----------------------------------------\n",
    "\n",
    "Lets solve the OCP using following pseudo-spectral approximation\n",
    "* Collocation using Legendre-Gauss-Radau roots\n",
    "* Let's plot the position and velocity evolution with time starting from 0.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "******************************************************************************\n",
      "This program contains Ipopt, a library for large-scale nonlinear optimization.\n",
      " Ipopt is released as open source code under the Eclipse Public License (EPL).\n",
      "         For more information visit http://projects.coin-or.org/Ipopt\n",
      "******************************************************************************\n",
      "\n",
      "Total number of variables............................:       76\n",
      "                     variables with only lower bounds:       25\n",
      "                variables with lower and upper bounds:       26\n",
      "                     variables with only upper bounds:        0\n",
      "Total number of equality constraints.................:       52\n",
      "Total number of inequality constraints...............:       25\n",
      "        inequality constraints with only lower bounds:        0\n",
      "   inequality constraints with lower and upper bounds:       25\n",
      "        inequality constraints with only upper bounds:        0\n",
      "\n",
      "\n",
      "Number of Iterations....: 11\n",
      "\n",
      "                                   (scaled)                 (unscaled)\n",
      "Objective...............:   2.8734932991287625e+00    2.8734932991287625e+00\n",
      "Dual infeasibility......:   3.4605651677566129e-13    3.4605651677566129e-13\n",
      "Constraint violation....:   4.6562753652779065e-13    4.6562753652779065e-13\n",
      "Complementarity.........:   2.5153452656320664e-09    2.5153452656320664e-09\n",
      "Overall NLP error.......:   2.5153452656320664e-09    2.5153452656320664e-09\n",
      "\n",
      "\n",
      "Number of objective function evaluations             = 12\n",
      "Number of objective gradient evaluations             = 12\n",
      "Number of equality constraint evaluations            = 12\n",
      "Number of inequality constraint evaluations          = 12\n",
      "Number of equality constraint Jacobian evaluations   = 12\n",
      "Number of inequality constraint Jacobian evaluations = 12\n",
      "Number of Lagrangian Hessian evaluations             = 11\n",
      "Total CPU secs in IPOPT (w/o function evaluations)   =      0.016\n",
      "Total CPU secs in NLP function evaluations           =      0.002\n",
      "\n",
      "EXIT: Optimal Solution Found.\n",
      "      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval\n",
      "       nlp_f  |  53.00us (  4.42us)  52.65us (  4.39us)        12\n",
      "       nlp_g  | 327.00us ( 27.25us) 323.85us ( 26.99us)        12\n",
      "    nlp_grad  |  58.00us ( 58.00us)  55.45us ( 55.45us)         1\n",
      "  nlp_grad_f  |  77.00us (  5.92us)  77.00us (  5.92us)        13\n",
      "  nlp_hess_l  | 112.00us ( 10.18us) 115.53us ( 10.50us)        11\n",
      "   nlp_jac_g  | 515.00us ( 39.62us) 515.59us ( 39.66us)        13\n",
      "       total  |  19.01ms ( 19.01ms)  19.51ms ( 19.51ms)         1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mpo, post = mp.solve(ocp, n_segments=1, poly_orders=25, scheme=\"LGR\", plot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*Retrive the solution*\n",
    "\n",
    "x: states, u: Controls, t:time, a:Algebraic variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Terminal time, state : 10.0000 vs 10 (Exact), [-0.00178384 -0.00014044]\n"
     ]
    }
   ],
   "source": [
    "x, u, t, a = post.get_data()\n",
    "print(f\"Terminal time, state : {t[-1][0]:.4f} vs 10 (Exact), {x[-1]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Solve again with Chebyshev-Gauss-Lobatto (CGL) roots\n",
    "------------------------------------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of variables............................:       76\n",
      "                     variables with only lower bounds:       25\n",
      "                variables with lower and upper bounds:       26\n",
      "                     variables with only upper bounds:        0\n",
      "Total number of equality constraints.................:       52\n",
      "Total number of inequality constraints...............:       25\n",
      "        inequality constraints with only lower bounds:        0\n",
      "   inequality constraints with lower and upper bounds:       25\n",
      "        inequality constraints with only upper bounds:        0\n",
      "\n",
      "\n",
      "Number of Iterations....: 12\n",
      "\n",
      "                                   (scaled)                 (unscaled)\n",
      "Objective...............:   2.8734060736207896e+00    2.8734060736207896e+00\n",
      "Dual infeasibility......:   2.6383995374325467e-12    2.6383995374325467e-12\n",
      "Constraint violation....:   2.1178614417749486e-12    2.1178614417749486e-12\n",
      "Complementarity.........:   2.5713635670826573e-09    2.5713635670826573e-09\n",
      "Overall NLP error.......:   2.5713635670826573e-09    2.5713635670826573e-09\n",
      "\n",
      "\n",
      "Number of objective function evaluations             = 13\n",
      "Number of objective gradient evaluations             = 13\n",
      "Number of equality constraint evaluations            = 13\n",
      "Number of inequality constraint evaluations          = 13\n",
      "Number of equality constraint Jacobian evaluations   = 13\n",
      "Number of inequality constraint Jacobian evaluations = 13\n",
      "Number of Lagrangian Hessian evaluations             = 12\n",
      "Total CPU secs in IPOPT (w/o function evaluations)   =      0.013\n",
      "Total CPU secs in NLP function evaluations           =      0.001\n",
      "\n",
      "EXIT: Optimal Solution Found.\n",
      "      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval\n",
      "       nlp_f  |  58.00us (  4.46us)  57.81us (  4.45us)        13\n",
      "       nlp_g  | 358.00us ( 27.54us) 355.20us ( 27.32us)        13\n",
      "    nlp_grad  |  68.00us ( 68.00us)  67.78us ( 67.78us)         1\n",
      "  nlp_grad_f  |  86.00us (  6.14us)  83.08us (  5.93us)        14\n",
      "  nlp_hess_l  | 127.00us ( 10.58us) 126.75us ( 10.56us)        12\n",
      "   nlp_jac_g  | 536.00us ( 38.29us) 610.09us ( 43.58us)        14\n",
      "       total  |  20.51ms ( 20.51ms)  20.98ms ( 20.98ms)         1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mpo, post = mp.solve(ocp, n_segments=1, poly_orders=25, scheme=\"CGL\", plot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Terminal time, state : 10.0000 vs 10s (Exact), [-0.00178269 -0.00013973]\n"
     ]
    }
   ],
   "source": [
    "x, u, t, a = post.get_data()\n",
    "print(f\"Terminal time, state : {t[-1][0]:.4f} vs 10s (Exact), {x[-1]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Solve again with Legendre-Gauss-Lobatto (LGL) roots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of variables............................:       76\n",
      "                     variables with only lower bounds:       25\n",
      "                variables with lower and upper bounds:       26\n",
      "                     variables with only upper bounds:        0\n",
      "Total number of equality constraints.................:       52\n",
      "Total number of inequality constraints...............:       25\n",
      "        inequality constraints with only lower bounds:        0\n",
      "   inequality constraints with lower and upper bounds:       25\n",
      "        inequality constraints with only upper bounds:        0\n",
      "\n",
      "\n",
      "Number of Iterations....: 11\n",
      "\n",
      "                                   (scaled)                 (unscaled)\n",
      "Objective...............:   2.8734849959084205e+00    2.8734849959084205e+00\n",
      "Dual infeasibility......:   8.2869030765986375e-12    8.2869030765986375e-12\n",
      "Constraint violation....:   6.0937921375625592e-12    6.0937921375625592e-12\n",
      "Complementarity.........:   2.6832881949699023e-09    2.6832881949699023e-09\n",
      "Overall NLP error.......:   2.6832881949699023e-09    2.6832881949699023e-09\n",
      "\n",
      "\n",
      "Number of objective function evaluations             = 12\n",
      "Number of objective gradient evaluations             = 12\n",
      "Number of equality constraint evaluations            = 12\n",
      "Number of inequality constraint evaluations          = 12\n",
      "Number of equality constraint Jacobian evaluations   = 12\n",
      "Number of inequality constraint Jacobian evaluations = 12\n",
      "Number of Lagrangian Hessian evaluations             = 11\n",
      "Total CPU secs in IPOPT (w/o function evaluations)   =      0.015\n",
      "Total CPU secs in NLP function evaluations           =      0.002\n",
      "\n",
      "EXIT: Optimal Solution Found.\n",
      "      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval\n",
      "       nlp_f  |  57.00us (  4.75us)  54.18us (  4.51us)        12\n",
      "       nlp_g  | 330.00us ( 27.50us) 326.96us ( 27.25us)        12\n",
      "    nlp_grad  |  53.00us ( 53.00us)  52.09us ( 52.09us)         1\n",
      "  nlp_grad_f  |  77.00us (  5.92us)  76.10us (  5.85us)        13\n",
      "  nlp_hess_l  | 119.00us ( 10.82us) 116.95us ( 10.63us)        11\n",
      "   nlp_jac_g  | 510.00us ( 39.23us) 516.94us ( 39.76us)        13\n",
      "       total  |  18.17ms ( 18.17ms)  17.80ms ( 17.80ms)         1\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mpo, post = mp.solve(ocp, n_segments=1, poly_orders=25, scheme=\"LGL\", plot=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Terminal time, state : 10.0000 vs 10s (Exact), [-0.00178275 -0.00014031]\n"
     ]
    }
   ],
   "source": [
    "x, u, t, a = post.get_data()\n",
    "print(f\"Terminal time, state : {t[-1][0]:.4f} vs 10s (Exact), {x[-1]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
